'''
@Project ：my_python_project 
@File    ：test2.py.py
@IDE     ：PyCharm 
@Author  ：xionglinhui
@Date    ：2024/10/15 上午8:20 
'''

# 一：先定义类
class Student:
    '''打印学生信息'''
    # 1、变量的定义
    stu_school = 'old_boy'

    def __init__(obj, x, y, z):
        pass
        print(f'obj:{obj}')
        obj.stu_name = x,
        obj.stu_age = y,
        obj.stu_gender = z
        # return 123  # 会报错 TypeError: __init__() should return None, not 'int'
        # return None   # 默认只能return None


    # 2、功能的定义
    def tell_stu_info(stu_obj):
        print('学生信息：名字：%s 年龄：%s 性别：%s'%(
                  stu_obj['stu_name'],
                  stu_obj['stu_age'],
                  stu_obj['stu_gender']
              ))
    def set_info(stu_obj,x,y,z):
        stu_obj['stu_name'] = x,
        stu_obj['stu_age'] = y,
        stu_obj['stu_gender'] = z

    print('==== 类 类 类 ====')

# 二：再调用类产生对象
# 调用类的过程又称之为实例化，发生了三件事
# 1、先产生一个空对象
# 2、python会自动调用类中的__init__方法然将空对象已经调用类时括号内传入的参数一同传给__init__方法
# 3、返回初始完的对象

stu1_obj = Student('linhui', 18, 'male') # 等价于 Student.__init__(空对象，'linhui', 18, 'male')
stu2_obj = Student('dafeifei', 19, 'male')
stu3_obj = Student('xiong', 20, 'male')
print(stu1_obj.__dict__)  # {'stu_name': ('linhui',), 'stu_age': (18,), 'stu_gender': 'male'}
print(stu2_obj.__dict__)  # {'stu_name': ('dafeifei',), 'stu_age': (19,), 'stu_gender': 'male'}
print(stu3_obj.__dict__)  # {'stu_name': ('xiong',), 'stu_age': (20,), 'stu_gender': 'male'}


# 总结__init__方法
# 1、会在调用类时自动触发执行，用来为对象初始化自己独有的数据
# 2、__init__内应该存放是为对象初始化属性的功能，但是是可以存放任意其他代码，想要在
#    类调用时就立刻执行的代码都可以放到该方法内
# 3、__init__方法必须返回None
